package org.chen;

import org.chen.pool.JedisConnect;

public class ListJedisTest {
  public static void main(String[] args) {
    JedisConnect connect = new JedisConnect();
    connect.execute(jedis -> {
      //清空当前数据库
      jedis.flushDB();

      //将value插入到列表的头部位置，即最后插入的在列表最前面
      jedis.lpush("a1","a","b","c");
      //获取key指定下标范围的value
      System.out.println(jedis.lrange("a1", 0, -1));//[c, b, a]

      //从列表头部弹出（移除）一个元素
      jedis.lpop("a1");
      System.out.println(jedis.lrange("a1", 0, -1));//[b, a]

      //将value插入到列表的尾部位置，即最先插入的在列表最前面
      jedis.rpush("a2","1","2","3");
      System.out.println(jedis.lrange("a2", 0, -1));//[1, 2, 3]

      //从列表尾部弹出（移除）一个元素
      jedis.rpop("a2");
      System.out.println(jedis.lrange("a2", 0, -1));//[1, 2]

      //返回列表中下标位置为index的value
      System.out.println(jedis.lindex("a1", 0));//b
      System.out.println(jedis.lindex("a1", 1));//a

      jedis.lpush("a1","c","d","e","f");//a1 [f,e,d,c, b, a]

      //截取列表指定范围的值形成新的列表
      jedis.ltrim("a1",1,4);
      System.out.println(jedis.lrange("a1", 0, -1));//[e, d, c, b]

      //阻塞式列表的弹出列表的一个元素，即如果列表中有值，则立刻弹出，否则将等待到timeout时间才停止阻塞
      System.out.println(jedis.blpop(10, "a2"));//[a2, 1]
      System.out.println(jedis.blpop(10, "a2"));
      //列表中没值了，开始阻塞，等待值进来进行弹出，期间不能做任何操作直至timeout
      System.out.println(jedis.blpop(10, "a2"));

    });
  }
}
